import Vue from 'vue';
import Vuex from 'vuex';


Vue.use(Vuex);

let defaultCartList = [];
if (localStorage.getItem("cartList")) {
	defaultCartList = JSON.parse(localStorage.getItem("cartList"));
}

// 初始化状态
const state = {
	cartList: defaultCartList
}


//获取当前状态
const getters = {}

// 同步修改当前状态
const mutations = {

	setCartList(state, param) {
		let tempCartList = state.cartList;
		let goods = param.goods
		switch (param.action) {
			case "ADD":
				var inCart = false; //用于标记传过来的商品是否已经存在购物车中
				//遍历购物车数据，判断购物车中是否已存在该商品，如果存在hadGoods做标记，并且数量增加
				tempCartList.forEach((item) => {
					if (item.id == goods.id) { //购物车中已存在该商品
						//数量增加
						item.num += goods.num;
						inCart = true;
					}
				})
				//如果购物车中不存在该商品，向购物车中添加该商品信息
				if (!inCart) {
					//将该商品信息存入购物车
					tempCartList.push(param.goods);
				}
				break;
			case "DEL":
				tempCartList.forEach((item, index) => {
					if (item.id == param.id) {
						tempCartList.splice(index, 1);
					}
				});
				break;
			case "UP":
					tempCartList.forEach((item,index) => {
						if (item.id == param.goods.id) {
							tempCartList.splice(index, 1,param.goods);
						}
					});
				break;
		}
		localStorage.setItem("cartList", JSON.stringify(tempCartList));
		return JSON.parse(JSON.stringify({ ...state,
			cartList: tempCartList
		}));
	}
}

//异步修改当前状态
const actions = {
	setCartListAsync(store, param) {
		//状态管理器中购物车数据更新
		store.commit("setCartList", param);
		//同步购物车数据到服务器
		// axios.post("更新购物车数据的接口",state.cartList).then((res)=>{})
		//模拟同步数据到服务器（存储到local storage中）
		localStorage.setItem("cartList", JSON.stringify(state.cartList));
	}
}

//new一个状态管理器实例
const stort = new Vuex.Store({
	state,
	getters,
	mutations,
	actions
})
//把状态管理器export出去
export default stort;
